home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / util / pack / xfdmaster.lha / xfd / Developer / Sources / ASM / xfdExeHead.a < prev    next >
Text File  |  1999-02-05  |  3KB  |  158 lines

  1. * Objectheader
  2. *
  3. *    Name:        xfdExeHead.a
  4. *    Author:        SDI
  5. *    Distribution:    PD
  6. *    Description:    XFD external test header (program startup code)
  7. *    Compileropts:    -
  8. *    Linkeropts:    -
  9. *
  10. * 1.0   03.02.98 : first version
  11. * 1.1   04.02.98 : fixed a lot bugs
  12. * 1.2   09.08.98 : one little bug-fix
  13. * 1.3   09.12.98 : added ExecBase passing
  14. * 1.4   08.01.99 : added type output
  15.  
  16.         INCLUDE    "libraries/xfdmaster.i"
  17.         INCLUDE    "exec/memory.i"
  18.         INCLUDE    "dos/dos.i"
  19.  
  20.         MOVEA.L    A0,A5
  21.         MOVE.L    D0,D7            * store them
  22.  
  23.         * get dos library opened
  24.         MOVEQ    #33,D0
  25.         MOVEA.L    4.W,A6
  26.         LEA.L    DosName(PC),A1
  27.         JSR    _LVOOpenLibrary(A6)
  28.         TST.L    D0
  29.         BEQ.W    .NoDos
  30.         MOVEA.L    D0,A4            * A4 is DosBase
  31.  
  32.         * open source file
  33.         MOVEA.L    A4,A6
  34.         CLR.B    -1(A5,D7)        * clear return
  35.         MOVE.L    A5,D1
  36.         MOVE.L    #MODE_OLDFILE,D2
  37.         JSR    _LVOOpen(A6)
  38.         MOVE.L    D0,D6            * D6 is InFH
  39.         BEQ.W    .NoFH
  40.         MOVE.B    #'D',-1(A5,D7)        * create save name
  41.         CLR.B    (A5,D7)
  42.  
  43.         * seek to end and back to start --> get file size
  44.         MOVE.L    D6,D1
  45.         MOVEQ    #0,D2
  46.         MOVEQ    #OFFSET_END,D3
  47.         JSR    _LVOSeek(A6)
  48.         MOVE.L    D6,D1
  49.         MOVEQ    #0,D2
  50.         MOVEQ    #OFFSET_BEGINNING,D3
  51.         JSR    _LVOSeek(A6)
  52.         MOVEA.L    A6,A4
  53.         MOVE.L    D0,SourceSize
  54.  
  55.         * allocate memory
  56.         MOVEA.L    4.W,A6
  57.         MOVEQ.L    #MEMF_ANY,D1
  58.         JSR    _LVOAllocMem(A6)
  59.         MOVEA.L    A4,A6
  60.         MOVE.L    D0,SourceBuf
  61.         BEQ.W    .NoSourceBuf
  62.  
  63.         * read in buffer
  64.         MOVE.L    D6,D1
  65.         MOVE.L    D0,D2
  66.         MOVE.L    SourceSize(PC),D3
  67.         JSR    _LVORead(A6)
  68.         CMP.L    #-1,D0
  69.         BEQ.W    .noread
  70.  
  71.         * call recog functions
  72.         LEA.L    ForeMan(PC),A2
  73.         MOVEA.L    xfdf_FirstSlave(A2),A2
  74. .recogloop    MOVE.L    A2,D0                * for test purpose
  75.         BEQ.B    .notfound
  76.         MOVE.L    SourceSize(PC),D0
  77.         MOVEA.L    SourceBuf(PC),A0
  78.         LEA    xfdrr(PC),A1
  79.         MOVEA.L    xfds_RecogBuffer(A2),A3
  80.         JSR    (A3)
  81.         TST.L    D0
  82.         BNE.B    .found
  83.         MOVEA.L    xfds_Next(A2),A2
  84.         BRA.B    .recogloop
  85. .found        * call decrunch function
  86.         LEA    FormatStr(PC),A0
  87.         MOVE.L    A0,D1
  88.         LEA    xfds_PackerName(A2),A0
  89.         MOVE.L    A0,D2
  90.         JSR    _LVOVPrintf(A6)
  91.  
  92.         LEA    xfdbi(PC),A0
  93.         MOVEA.L    xfds_DecrunchBuffer(A2),A3
  94.         MOVE.L    4.W,-(A7)
  95.         LEA    -$3A(A7),A6        * create ExeBase ptr
  96.         JSR    (A3)
  97.         MOVE.L    (A7)+,A6        * correct stack
  98.         TST.L    D0
  99.         BEQ.B    .notfound
  100.  
  101.         * open destination file
  102.         MOVEA.L    A4,A6
  103.         MOVE.L    A5,D1
  104.         MOVE.L    #MODE_NEWFILE,D2
  105.         JSR    _LVOOpen(A6)
  106.         MOVE.L    D0,D5            * D5 is OutFH
  107.         BEQ.B    .NoOutFH
  108.  
  109.         * write destination
  110.         MOVE.L    D5,D1
  111.         MOVE.L    TarBuf(PC),D2
  112.         MOVE.L    TarSaveLen(PC),D3
  113.         JSR    _LVOWrite(A6)
  114.  
  115.         * close destination
  116.         MOVE.L    D5,D1
  117.         JSR    _LVOClose(A6)
  118. .NoOutFH    MOVEA.L    4.W,A6            * free decrunch buffer
  119.         MOVE.L    TarLen(PC),D0
  120.         MOVEA.L    TarBuf(PC),A1
  121.         JSR    _LVOFreeMem(A6)
  122. .notfound
  123. .noread        MOVEA.L    4.W,A6            * free source buffer
  124.         MOVEA.L    SourceBuf(PC),A1
  125.         MOVE.L    SourceSize(PC),D0
  126.         JSR    _LVOFreeMem(A6)
  127. .NoSourceBuf    MOVEA.L    A4,A6            * close input fh
  128.         MOVEA.L    D6,D1
  129.         JSR    _LVOClose(A6)
  130. .NoFH        MOVEA.L    A4,A1            * close dos
  131.         MOVEA.L    4.W,A6
  132.         JSR    _LVOCloseLibrary(A6)
  133. .NoDos        RTS
  134.  
  135. xfdbi
  136. SourceBuf    DC.L    0
  137. SourceSize    DC.L    0
  138.         DC.L    0
  139.         DC.L    0
  140.         DC.W    XFDPFF_RELOC,XFDERR_OK
  141. TarBuf        DC.L    0
  142.         DC.L    MEMF_ANY
  143. TarLen        DC.L    0
  144. TarSaveLen    DC.L    0
  145.         DC.L    0,0,0
  146. Flags        DC.W    0
  147.         DC.W    0
  148.         DC.L    0,0
  149. UserBuf        DC.L    0
  150. UserBufLen    DC.L    0
  151.  
  152. xfdrr        DC.L    0
  153.         DC.L    0
  154. DosName     DC.B    "dos.library",0
  155. FormatStr    DC.B    'Cruncher-Name: %s\n',0
  156.         EVEN
  157.  
  158.